package edu.upn.sigemfi.plt.beans;

import edu.upn.sigemfi.plt.bc.CuentaDelegate;
import edu.upn.sigemfi.plt.bc.TipoCuentaDelegate;
import edu.upn.sigemfi.plt.be.Cuenta;
import edu.upn.sigemfi.plt.be.TipoCuenta;
import edu.upn.sigemfi.seg.be.Sucursal;
import edu.upn.sigemfi.plt.be.EstadoCuenta;
import java.lang.String;
import java.util.List;
import javax.faces.model.SelectItem;
import java.util.ArrayList;

/**
 *
 * @author Gerard
 */
public class CuentaController {

    private CuentaDelegate cuentaDelegado;
    private TipoCuentaDelegate tipoCuentaCuentaDelegado;
    private Cuenta cuenta;
    private TipoCuenta tipoCuenta;
    private SelectItem[] ListaEstadoCuenta;
    private List<TipoCuenta> ListaTiposCuentas;
    private List<Sucursal> ListaSucursales;
    private EstadoCuenta estadoCuenta;

    public CuentaController() {
        cuentaDelegado = new CuentaDelegate();
        tipoCuentaCuentaDelegado = new TipoCuentaDelegate();
        
        try {
            ListaTiposCuentas = tipoCuentaCuentaDelegado.listar();
        } catch (Exception e) {
        }
    }

    //---------------------------GENERAL
    public String cancelar() {
        return "listar";
    }

    public String cuenta() {
        return "cuenta";
    }

    public String listar() {
        return "listar";
    }
    //---------------------------CUENTAS

    public String nuevo() {
        cuenta = new Cuenta();
        tipoCuenta = new TipoCuenta();
        return "nuevo";
    }

    public String registrar() {
        try {
            cuentaDelegado.crear(cuenta);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "volver";
    }

    public String actualizar() {
        try {
            cuentaDelegado.editar(cuenta);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "volver";
    }

    public String eliminar() {
        try {
            cuentaDelegado.eliminar(cuenta);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "volver";
    }

    public Cuenta buscar(Long codigo) {
        try {
            cuentaDelegado.buscar(codigo);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public List<Cuenta> geCuentas() {
        try {
            return cuentaDelegado.listar();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public Cuenta getCuenta() {
        return cuenta;
    }

    public void setCuenta(Cuenta cuenta) {
        this.cuenta = cuenta;
    }

    public TipoCuenta getTipoCuenta() {
        return tipoCuenta;
    }

    public void setTipoCuenta(TipoCuenta tipoCuenta) {
        this.tipoCuenta = tipoCuenta;
    }

    //--------------------------------------------TIPO DE CUENTAS
    public SelectItem[] getTipoCuentas() {
        SelectItem[] selects = null;
        try {
            selects = new SelectItem[ListaTiposCuentas.size()];
            int i = 0;
            for (TipoCuenta tp : ListaTiposCuentas) {
                selects[i++] = new SelectItem(tp, tp.getDescripcion());
            }
        } catch (Exception e) {
            selects = new SelectItem[1];
            selects[0] = new SelectItem(null, "Error al momento de consultar Tipos de Cuenta");
            System.out.println(e.getMessage());
            AbstractController.mostrarError(e.getMessage());
        }
        return selects;
    }

    public EstadoCuenta getEstadoCuenta() {
        return estadoCuenta;
    }
 //--------------------------------------------SUCURSAL
    public SelectItem[] getSucursales() {
        SelectItem[] selects = null;
        try {
            selects = new SelectItem[ListaSucursales.size()];
            int i = 0;
            for (Sucursal s : ListaSucursales) {
                selects[i++] = new SelectItem(s, s.getNombre());
            }
        } catch (Exception e) {
                selects = new SelectItem[1];
            selects[0] = new SelectItem(null, "Error al momento de consultar Sucursales");
            System.out.println(e.getMessage());
            AbstractController.mostrarError(e.getMessage());
        }
        return selects;
    }




//    public SelectItem[] getSexos() {
//        Sexo[] lista = Sexo.values();
//        SelectItem[] select = new SelectItem[lista.length];
//        int i = 0;
//        //recorre la lista , por medio del objeto sexo "s"
//        for (Sexo s : lista) {
//            // va agregando cada item del sexo detallado en el enum
//            select[i++] = new SelectItem(s, s.toString());
//        }
//        return select;
//    }

//             public SelectItem[] getMarcarSI() {
//        SelectItem[] select = new SelectItem[marcas.size()];
//        int i = 0;
//        for (Marca m : marcas) {
//            select[i++] = new SelectItem(m, m.getNombre());
//        }
//        return select;
//    }
}
